package com.itheima.leetcode.od.c.sort;

import java.util.*;
import java.util.stream.Collectors;

/**
 * <h3>字符统计及重排</h3>
 */
public class CharacterStatisticsAndRearrangement {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine(); // 读取输入字符串
        scanner.close();

        // 统计字母出现频率
        Map<Character, Integer> freqMap = new HashMap<>();
        for (char ch : input.toCharArray()) {
            freqMap.put(ch, freqMap.getOrDefault(ch, 0) + 1);
        }

        // 将统计结果存入列表
        List<Map.Entry<Character, Integer>> charList = new ArrayList<>(freqMap.entrySet());

        // 自定义排序
        charList.sort((a, b) -> {
            // 先按频率降序排序
            if (!a.getValue().equals(b.getValue())) {
                return b.getValue() - a.getValue();
            }
            // 频率相同时，小写字母在前，大写字母在后
            boolean isALower = Character.isLowerCase(a.getKey());
            boolean isBLower = Character.isLowerCase(b.getKey());

            if (isALower && !isBLower) {
                return -1;
            } // 小写字母在前
            if (!isALower && isBLower) {
                return 1;
            }  // 大写字母在后
            return a.getKey() - b.getKey(); // 同类型字母按 ASCII 排序
        });

        // 格式化输出
        System.out.println(charList.stream()
                .map(entry -> entry.getKey() + ":" + entry.getValue())
                .collect(Collectors.joining(";")));
    }
}